/******************************************************************************
 * 【本类功能概述】                                 					      *
 *  版权所有（C）2017- 匠梦科技                                         *
 *  保留所有权利。                                                            *
 ******************************************************************************
 *  作者 : <hughjk>
 *  创建时间:2019年5月19日 14:59:28
 *  文件描述:字符串加密
 *****************************************************************************/

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace Util
{
    //字符串加密与解密
    public class StringEncrypt
    {
        private static string encryptKey = "Tsf4"; //字符串加密密钥(注意：密钥只能是4位)

        public string Encrypt(string str)
        {
            //加密字符串
            try
            {
                byte[] key = Encoding.Unicode.GetBytes(encryptKey); //密钥
                byte[] data = Encoding.Unicode.GetBytes(str); //待加密字符串

                DESCryptoServiceProvider descsp = new DESCryptoServiceProvider(); //加密、解密对象
                MemoryStream MStream = new MemoryStream(); //内存流对象

                //用内存流实例化加密流对象
                CryptoStream CStream =
                    new CryptoStream(MStream, descsp.CreateEncryptor(key, key), CryptoStreamMode.Write);
                CStream.Write(data, 0, data.Length); //向加密流中写入数据
                CStream.FlushFinalBlock(); //将数据压入基础流
                byte[] temp = MStream.ToArray(); //从内存流中获取字节序列
                CStream.Close(); //关闭加密流
                MStream.Close(); //关闭内存流

                return Convert.ToBase64String(temp); //返回加密后的字符串
            }
            catch
            {
                return str;
            }
        }

        public string Decrypt(string str)
        {
            //解密字符串
            try
            {
                byte[] key = Encoding.Unicode.GetBytes(encryptKey); //密钥
                byte[] data = Convert.FromBase64String(str); //待解密字符串

                DESCryptoServiceProvider descsp = new DESCryptoServiceProvider(); //加密、解密对象
                MemoryStream MStream = new MemoryStream(); //内存流对象

                //用内存流实例化解密流对象
                CryptoStream CStream =
                    new CryptoStream(MStream, descsp.CreateDecryptor(key, key), CryptoStreamMode.Write);
                CStream.Write(data, 0, data.Length); //向加密流中写入数据
                CStream.FlushFinalBlock(); //将数据压入基础流
                byte[] temp = MStream.ToArray(); //从内存流中获取字节序列
                CStream.Close(); //关闭加密流
                MStream.Close(); //关闭内存流

                return Encoding.Unicode.GetString(temp); //返回解密后的字符串
            }
            catch
            {
                return str;
            }
        }
    }
}